package com.gzr.collection.stream;

import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 获取stream
 */
public class StreamDemo03 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("张无忌");
        list.add("张三丰");
        list.add("张三");
        list.add("赵敏");

        //1、过滤方法
        list.stream().filter(v->v.startsWith("张") && v.length() == 3).collect(Collectors.toList());

        //2、排序方法
        List<Double> scores = new ArrayList<>();
        scores.add(99.8);
        scores.add(88.8);
        scores.add(88.8);
        scores.add(77.7);
        scores.add(66.6);
        scores.add(55.5);
        scores.stream().sorted().forEach(System.out::println);// 默认是升序
        System.out.println("---------");
        scores.stream().sorted((s1, s2) -> Double.compare(s2, s1)).forEach(System.out::println);// 降序
        System.out.println("---------");
        scores.stream().sorted((s1, s2) -> Double.compare(s2, s1)).limit(2).forEach(System.out::println);// 只要前两名
        System.out.println("---------");
        scores.stream().sorted((s1, s2) -> Double.compare(s2, s1)).skip(2).forEach(System.out::println);// 跳过前两名
        System.out.println("---------");
        //如果希望自定义对象能够去除重复，重新对象的hashCode和equals方法，才可以去重
        scores.stream().sorted((s1, s2) -> Double.compare(s2, s1)).distinct().forEach(System.out::println);//去重
        System.out.println("---------");
        //映射/加工方法：把流上原来的数据拿出来变成新的数据又放到流上去
        scores.stream().map(s->"加十分之后："+(s + 10)).forEach(System.out::println);
        //合并流
        Stream<String> s1 = Stream.of("刘备", "关羽", "张飞");
        Stream<Integer> s2 = Stream.of(100, 200);
        Stream<Object> concat = Stream.concat(s1, s2);
        concat.forEach(System.out::println);
    }
}
